Bug Bounty 通过 DS_STORE文件进行文件泄露
原文链接:https://omespino.com/write-up-file-disclosure-via-ds_store-file-macos/
大家好,这是另一篇Facebook Whitehat报告写的(Facebook将该报告标记为N / A,但是其他一些程序接受这个错误作为有效的错误奖励,根据前Twitter。所以这可能在某些情况下有用),所以我写下个人的渗透测试报告,希望能够帮助到你们:
标题:目录列表通过.DS_Store文件(macOS)公开
产品/ URL:https://live.oculus.com/
描述和影响
Apple Macintosh OS X / macOS .DS_Store
目录列表泄露漏洞
在Apple macOS操作系统中,.DS_Store是一个存储其包含文件夹的自定义属性的文件,例如图标的位置或背景图像的选择。
但也列出了由MACOS自动创建的作为隐藏文件的目录的全部文件。
远程攻击者可以通过像以下形式:攻击主机的Web服务提交URL来读取Web目录内容信息:
http://www.example.com/target_directory/.DS_store
此信息可能为攻击者提供敏感信息,包括系统配置,已安装的应用程序等。
如果被正确利用,此信息可能会使攻击者进一步损害主机的安全性。
但.DS_Store文件如何在Web服务器上运行?这可以通过以下几种方式实现:
用户通过FTP将整个文件夹复制到Web服务器。在这种情况下,该文件夹中包含的.DS_Store文件(或子文件夹中包含的多个.DS_Store文件)
将被复制到Web服务器。(请注意,默认情况下,某些FTP客户端不会复制.DS_Store文件。)
用户通过选择文件夹中的所有文件,将文件夹的全部内容通过FTP复制到Web服务器。在正常使用中,.DS_Store文件不会被复制,
但是,如果在用户的FTP客户端中显示不可见的文件,用户只需选择文件夹中的所有文件并将它们复制到Web服务器目录,
.DS_Store文件 - 和任何其他不可见的文件 - 将被复制到服务器。
复现过程
- OS:macOS
- 您需要安装python2.7,pip for python2.7,ds_store和tqdm pip模块:
- brew install python && sudo pip install ds_store && sudo pip install tqdm
- 仅用于.DS_Store解析以制作内容文件“人类可读”
- 导航到https://live.oculus.com/assets/.DS_Store和“.DS_Store”文件,自动下载。
- 保存代码,这是一个小的“.DS_Store”文件解析器,在同一个“.DS_Store”文件目录中为“dsstore.py”:
*注意:这个脚本是从互联网的某些部分借来的,但我找不到来源了,如果有人知道作者,请让我知道给他/她写下参考链接。
1. #!/usr/bin/env python 1. # Begin Small .DS_Store Parser 1. # -*- encoding: utf-8 -*- 1. from ds_store import DSStore 1. from tqdm import tqdm 1. import argparse 1. parser = argparse.ArgumentParser() 1. parser.add_argument("-p", "--path", help="Path to the DS_Store file", required=True) 1. parser.add_argument("-t", "--type", help="Type : Iloc, bwsp, lsvp, lsvP, icvp", default='Iloc') 1. args = parser.parse_args() 1. dsstore = DSStore.open(args.path, 'r+') 1. for data in tqdm(dsstore): 1. data = str(data) 1. entry = data.translate(None, "<>") 1. entry = entry.split(' ') 1. if(entry[1] == args.type): 1. print(entry[0]) 1. # Ends Small .DS_Store Parser
运行脚本得到
1. localhost:~ds_store_py $ python dsstore.py -p .DS_Store
1. 0%|
1. fonts
1. images
1. logos
1. nux_bg_web.mp4
1. oculus-health.pdf
然后列出文件,让我们看看其他目录会发生什么,例如“images”,导航到https://live.oculus.com/assets/images/.DS_Store
和“.DS_Store” “文件,再次自动下载。
从图像重新运行.DS_Store的脚本并查看输出
1. localhost:~ds_store_py $ python dsstore.py -p .DS_Store
1. 0%|
1. 24_sprite.png
1. 24_sprite2x.png
1. _temp-cesbg.jpg
1. _temp-ceslogo.png
1. _temp-e3bg.jpg
1. _temp-e3logo.png
1. bg-event-generic.jpg
1. bg-experiences.jpg
1. bg-home.jpg
1. bg-search.jpg
1. bg- search2.jpg
1. black-dot@2x.png
1. black-pin1@2x.png
1. black-pin2@2x.png
1. black-pin3@2x.png
1. black-pin4@2x.png
1. black-pin@2x.png
1. blue-dot @ 2x .png
1. blue-pin1@2x.png
1. blue-pin2@2x.png
1. blue-pin3@2x.png
1. blue-pin4@2x.png
1. blue-pin@2x.png
1. confirmation-bg.jpg
1. event_e3_feature.jpg
1. event_tour_feature.jpg
1. facebook_og.jpg
1. facebook_share.jpg
1. favicon.png
1. new-reality-1.jpg
1. new-reality-3.jpg
1. oculus-ready.png
1. twitter_card.jpg
然后在浏览器中确认列出的任何文件的可访问性,例如“_temp-e3logo.png
”,通过任何浏览器都可以访问https://live.oculus.com/assets/images/_temp-e3logo.png
并查看该文件。
在整个目录“Three”中重复,如果您可以访问任何“.DS_Store”,则可以看到目录列表
建立在https://live.oculus.com/
上的“.DS_Store”文件:
1. https://live.oculus.com/assets/.DS_Store
1. https://live.oculus.com/assets/images/.DS_Store
1. https://live.oculus.com/assets/logos/.DS_Store
攻击者如何获取文件?
使用简单的google / bing dork,例如“site:live.oculus.com filetype(.DS_Store OR DS_Store)”,
或者可以在资源或图像目录上手动测试,在网址末尾添加.DS_Store:“https ://live.oculus.com/assets/“+”。DS_Store“,
因为当您在macOS中压缩文件夹并将文件夹上传到服务器时,上传DS_Store文件是一个常见错误,DS_Store文件本身就存在安全问题,
我认为安全问题是您在Web应用程序中发布了那种让攻击者列出整个目录的文件。
这次是在无害的文件夹中,但想想如果你不小心将.DS_Store上传到服务器中错误的公共文件夹中的影响。
无论如何,您应该删除任何Web应用程序公共服务器上的任何.DS_Store以防止此行为。
解决方案/修复:
清除Internet上发布的任何应用程序服务器上的任何.DS_Store文件。
时间表:
2017年6月3日:初步报告
2017年6月6日:安全团队成员Kurt寻求帮助以理解并重现该错误
06 Jun 2017:我的回复包含更多详细信息。
2017年6月7日:安全团队询问“攻击者”如何获取对上述文件的访问权限(.DS_Store)
2017年6月8日:报告分类2017年
6月7日:Bug确认并且Neal说修复正在进行中
2017年6月12日:Vic告诉我该bug已被缓解。
2017年6月12日:我回复确认该错误已于2017年6月
21日修补:报告标记为“不适用”,下一个决议“委员会开会分析问题,我们认为它没有资格获得赏金,因为没有敏感数据曝光“